package com.demo.config;

import com.demo.entity.TripOrder;
import com.demo.service.TripOrderService;
import dev.langchain4j.agent.tool.P;
import dev.langchain4j.agent.tool.Tool;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;

/**
 * AI工具
 */
@Slf4j
@Component
public class TripOrderTools {
    @Autowired
    TripOrderService tripOrderService;
    //出行预约的增删改查
    /**
     * 进行预约，添加出行预约
     */
    @Tool(name = "出行预约，进行出行预约功能",value = "如果用户需要进行出行预约，先要查询出行预约是否存在，" +
            "如果存在则提示用户出行预约记录存在，并且告诉用户出行预约信息，提示用户想要删除还是修改，如果不存在者用户才可以添加。" +
            "需要添加出行预约信息有:出行预约id（自动递增，无需填写）、 用户id（自动根据{{userId}}填写）" +
            "出行类型（（必填）），可以选择飞机票、火车票、客车等等 、出发城市（必填）、 到达城市（必填）"+
            "出发时间（必填，填写示例：2025-06-20 16:42:08）、" +
            "到达时间（必填，填写示例：2025-06-20 16:42:08）、" +
            "预定时间（自动生成）")
    public String add(TripOrder tripOrder) {
        log.info("进行出行预约功能");
        TripOrder tripOrderExist = tripOrderService.getByUserId(tripOrder.getUserId());
        if( tripOrderExist!= null) {
            return "您已经有出行预约记录了,记录如下："+tripOrderExist;
        }
        tripOrder.setReserveTime(LocalDateTime.now());
        if(tripOrderService.save(tripOrder)){
            log.info("出行预约成功，预约信息为{}",tripOrder);
            return "预约成功,您的预约记录为"+tripOrder;
        }
        return "预约失败";

    }

    /**
     * 查询出行预约记录
     * @param userId
     * @return
     */
    @Tool(name = "查询出行预约记录",value = "根据用户的的账户id进行查询，账户id就是用户登录时的id，也就是{{userId}}，ai已经知道")
    public String query(@P(value = "用户的账户id{{userId}}",required = true) Long userId) {
        TripOrder tripOrder = tripOrderService.getByUserId(userId);
        log.info("查询到预约记录，{}",tripOrder);
        if(tripOrder == null){
            return "没有预约记录，您可以先进行出行预约";
        }

        return "预约记录查询成功，预约记录如下："+ tripOrder;

    }
    @Tool(name = "删除出行预约记录",value = "先根据用户的的账户id{{userId}}进行查询，然后得到是否有记录，如果有记录就通过出行预约的id删除")
    public String delete(@P(value = "用户的账户id{{userId}}",required = true) Long userId) {
        log.info("用户的账户id {}",userId);
        TripOrder tripOrder = tripOrderService.getByUserId(userId);
        log.info("查询到{}",tripOrder);
        if(tripOrder == null){
            return "没有预约记录";
        }
        log.info("正在删除。。。 {}",tripOrder);
        boolean remove = tripOrderService.removeById(tripOrder.getTripId());

        if(remove){
            log.info("删除完成 {}",tripOrder);
            return "删除成功";
        }

        return "删除失败"+ tripOrder;

    }
    @Tool(name = "修改出行预约记录",value = "先根据用户的的账户id{{userId}}进行查询，然后得到是否有记录，如果有记录就通过可以进行修改了")
    public String update(@P(value = "用户的账户id{{userId}}",required = true) Long userId,
                         @P(value = "需要修改的出行类型，飞机票、火车票、客车",required = true) String type,
                         @P(value = "出发城市",required = true) String beginCity,
                         @P(value = "到达城市",required = true)  String endCity,
                         @P(value = "出发时间",required = true) LocalDateTime beginTime,
                         @P(value = "到达时间",required = true)   LocalDateTime endTime
    ) {
        log.info("用户的账户id为： {}",userId);
        TripOrder tripOrder = tripOrderService.getByUserId(userId);
        log.info("查询到{}",tripOrder);
        if(tripOrder == null){
            return "没有预约记录,无法修改";
        }
        tripOrder.setType(type);
        tripOrder.setBeginCity(beginCity);
        tripOrder.setEndCity(endCity);
        tripOrder.setBeginTime(beginTime);
        tripOrder.setEndTime(endTime);
        tripOrder.setReserveTime(LocalDateTime.now());
        boolean update = tripOrderService.updateById(tripOrder);
        if(update){
            return "修改成功,修改后的信息为"+tripOrder.toString();
        }
        return "修改失败";
    }

}
